package com.rimi.controller;

import com.github.pagehelper.PageInfo;
import com.rimi.bean.YqzcGoods;
import com.rimi.commons.CommonResult;
import com.rimi.commons.ResultStatus;
import com.rimi.model.dto.BuyGoodsDto;
import com.rimi.model.dto.GoodsListDto;
import com.rimi.service.GoodsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author pengyou
 *
 */
@RestController
@Slf4j
@Api(description = "首页搜索，类型搜索，sku搜索，商品名搜索",tags = "查询数据库中的商品信息")
@CrossOrigin
public class GoodsController {

    @Autowired
    GoodsService goodsService;

    /**
     * 通过（产品类型goodsType(必填项)）进行产品列表筛选（后面内容非必填，可以模糊查询）（产品分类classification，品牌brand，价格区间price boGoodsPrice下限  upGoodsPrice上限）
     * @param pageNum 当前页数
     * @param pageSize 每页多少条
     * @param goodsType 商品类型
     * @param goodsClassification 商品分类
     * @param goodsBrand 商品品牌
     * @param boGoodsPrice 最低价格
     * @param upGoodsPrice 最高价格
     * @return 商品列表
     */
    @GetMapping("/goodslist")
    @ApiOperation("通过（产品类型goodsType(必填项)）进行产品列表筛选（后面内容非必填，可以模糊查询）（产品分类classification，品牌brand，价格区间price boGoodsPrice下限  upGoodsPrice上限）")
    public CommonResult<PageInfo> searchGoodsList(Integer pageNum, Integer pageSize,String goodsType,String goodsClassification, String goodsBrand, Integer boGoodsPrice, Integer upGoodsPrice){
        if (goodsType == null){
            return CommonResult.onFailed(ResultStatus.TYPE_ERROR);
        }
        PageInfo goodsList = goodsService.searchGoodsList(pageNum,pageSize,goodsType,goodsClassification,goodsBrand,boGoodsPrice,upGoodsPrice);
        return goodsList.getSize()>0?CommonResult.onSuccess(goodsList):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }

    /**
     * 根据商品名字查询商品
     * @param goodsName 商品名字
     * @param pageNum 页数
     * @param pageSize 分页展示数
     * @return 分页后的数据
     */
    @GetMapping("/topsearch")
    @ApiOperation("顶部模糊查询（根据商品名字可以只输入关键字） 分页可不传  后台默认1页8个数据 pageNum为页数从0开始  pageSize为每页显示多少条数据，默认为8")
    public CommonResult<PageInfo> findGoodsByGoodsName(String goodsName,Integer pageNum,Integer pageSize){
        PageInfo goodList = goodsService.topSearch(goodsName,pageNum,pageSize);
        return goodList.getSize()>0 ? CommonResult.onSuccess(goodList):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }

    /**
     * 根据sku查找商品
     * @param goodsSku 商品sku
     * @return 商品
     */
    @GetMapping("/sku{goodsSku}")
    @ApiOperation("根据sku打开商品详情页")
    public CommonResult<YqzcGoods> findGoodsBySku(@PathVariable Integer goodsSku){
        YqzcGoods goodsBySku = goodsService.findGoodsBySku(goodsSku);
        return goodsBySku!=null?CommonResult.onSuccess(goodsBySku):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }

    /**
     * 根据类型查找商品 租赁 采购 办公
     * @return 商品列表 和 分页信息
     */
    @GetMapping("/type")
    @ApiOperation("点击类型时根据类型查找商品（rent buy made三种类型）不能为空")
    public CommonResult<PageInfo> findAllGoodsByType(String goodsType, Integer pageNum, Integer pageSize){
        if (goodsType == null){
            return CommonResult.onFailed(ResultStatus.TYPE_ERROR);
        }
        PageInfo goodsList = goodsService.findAllGoodsByType(goodsType,pageNum,pageSize);
        return goodsList.getSize()>0?CommonResult.onSuccess(goodsList):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }

    /**
     * 根据类型和分类查找商品
     * @param pageNum 页数
     * @param pageSize 每页条数
     * @param goodsType 商品分类
     * @param goodsClassify 商品类型
     * @return 商品列表
     */
    @GetMapping("/typeandclassfiy")
    @ApiOperation("根据商品分类type和产品类别classification查找商品 不能为空")
    public CommonResult<PageInfo> findGoodsByTypeAndClassify(Integer pageNum, Integer pageSize,String goodsType,String goodsClassify){
        if (goodsClassify == null || goodsType == null){
            return CommonResult.onFailed(ResultStatus.TYPE_ERROR);
        }
        PageInfo goodsList = goodsService.findGoodsByTypeAndClassify(pageNum,pageSize,goodsType,goodsClassify);
        System.out.println("goodsList = " + goodsList);
        return goodsList.getSize()>0?CommonResult.onSuccess(goodsList):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }

    /**
     * 获取随机商品
     * @return 单独随机商品
     */
    @GetMapping("/one")
    @ApiOperation("随机商品")
    public CommonResult<YqzcGoods> findAllGoods(){

        List<YqzcGoods> goodsList =  goodsService.findAllGoods();

        int num =  (int)(Math.random()*goodsList.size());

        return goodsList.size()>0? CommonResult.onSuccess(goodsList.get(num)):CommonResult.onFailed(ResultStatus.SEARCH_FAILED);
    }
}
